package br.com.ufc.quixada.service;

import br.com.ufc.quixada.dao.ClientesDAO;
import br.com.ufc.quixada.entidades.Clientes;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 * Classe responsavel por conter toda a logica de negocio
 * referente a cliente.
 * Para acesso a base de dados para persistencia das 
 * informacoes do cliente, ela faz uso da classe ClientesDAO.
 * @author AndreFreire
 *
 */
public class ClienteService {

    private ClientesDAO clienteDAO;

    public ClienteService() throws ClassNotFoundException {
        clienteDAO = new ClientesDAO();
    }

    /**
     * Metodo que retorna a lista de todos os cliente cadastrados
     * @return ArrayList<Clientes> - um ArrayList de objetos Cliente
     */
    public ArrayList<Clientes> listClientes() {
        ArrayList<Clientes> clientes = new ArrayList<Clientes>();
        try {
            //chama o metodo do alunoDAO
            clientes = clienteDAO.listaCliente();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return clientes;
    }

    /**
     * Metodo utilizado para adicionar um cliente a base de dados
     * cadastro do cliente
     * @return boolean - true se o cliente for adicionado com sucesso e false caso contrario
     * @param cliente - objeto Cliente a ser armazenado
     */
    public boolean addCliente(Clientes cliente) {
        try {
            clienteDAO.inserirCliente(cliente);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * Metodo Utilizado para remover um cliente da base de dados
     * @return boolean - true se o cliente for removido com sucesso e false caso contrario
     * @param cliente - objeto Cliente a ser removido
     */
    public boolean deleteCliente(Clientes cliente) {
        try {
            clienteDAO.deleteCliente(cliente);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * Metodo utilizado para atualizar os dados do cliente na base de dados.
     * @return boolean - true se o cliente for atualizado com sucesso e false caso contrario
     * @param cliente - objeto Cliente a ser atualizado
     */
    public boolean AtivarCliente(Clientes cliente) {
        try {
            clienteDAO.AtivarCliente(cliente);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * Metodo utilizado para buscar um cliente pelo cpf
     * @param cpf - CPF do cliente
     * @return cliente - objeto Cliente referente ao CPF passada ou null
     * caso nao exista
     */
    public Clientes clientefindByCPF(String cpfc) {
        Clientes cliente = null;
        try {
            cliente = clienteDAO.findByCPF(cpfc);
            return cliente;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * Metodo utilizado para buscar um cliente pelo email
     * @param email - Email do cliente
     * @return cliente - objeto Cliente referente ao Email passada ou null
     * caso nao exista
     */
    public Clientes clientefindByEmail(String emailc) {
        Clientes cliente = null;
        try {
            cliente = clienteDAO.findByEmail(emailc);
            return cliente;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}
